#include <iostream>
#include <fstream>
#include <string>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
class util
{

public:
     // 完成读取请求行：
     static bool getline(std::string &req, std::string &reline, std::string gsp)
     {
          int pos = req.find(gsp, 0);
          if (pos == string::npos)
               return 0;
          reline = req.substr(0, pos);
          req.erase(0, pos + gsp.size()); // 提取完进行删除方便下次提取
          return 1;
     }
     // 读取对应路径下的html：
     static bool readfile(std::string &text, std::string tar)
     { // 1·文本读取（比如读取图片等可能会遇到\n等符号导致读取中断直接换行等当前行后面内容就无法读到，导致错误）：
       //  std::ifstream in(tar.c_str());
       //  if (!in.is_open())
       //       return false;
       //  std::string line;
       //  while (std::getline(in, line))
       //  { // 使用getline读取的时候每次会将line情况在读取
       //       text += line;
       //  }
       //  in.close();
       //  return true;
       // 2·二进制读取：
          std::ifstream in(tar.c_str());
          if (!in.is_open())
               return false;
               int size=filesize(tar);
               text.resize(size);
               in.read((char*)text.c_str(),size);//这里string不能强转char*因此可先调用c_str
               return true;
     }
     static int filesize(string file)
     {  //c++文件io方法：
          // ifstream in(file);
          // if (!in.is_open())
          //      return 0;
          // in.seekg(0, in.end);
          // int size = in.tellg();
          // in.seekg(0, in.beg);
          // in.close();
          // return size;

          //系统调用：
          struct stat buff;
          int s = stat(file.c_str(), &buff);
          return buff.st_size;
     }
};